// 导入 数据库操作模块
const db = require('../db/index')
// 导入 加密 都用户提交的密码进行加密
const bcrypt = require('bcryptjs')
// 用这个包 生成 token  npm i jsonwebtoken
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')

// 引入狼人杀 角色
const { roleList } = require('../utils/role_config')
// 生成 guid
const { guid } = require('../utils/guid')


// 洗牌
const shuffle = (cards) => {
  var cardsTmp = []
  var len = cards.length
  for (var i=0; i<len; i++) {
    var index = Math.floor(Math.random()*(len-i))
    cardsTmp.push(cards[index])
    cards.splice(index, 1)
  }
  cards = cardsTmp
  return cards
}

// 创建房间的处理函数
exports.addRoom = (req, res) => {
  
  const sql = `select * from room where roomNumber='${req.body.roomNumber}'`
  db.query(sql, (err, results1) => {
    
    if (err) return res.cc(err.message)
    
    console.log('查询', results1)
    
    if (results1.length == 0) {
      console.log('创建房间', req.body, roleList)
      let roleDAta = JSON.parse(JSON.stringify(roleList))
      
      // 房间号没有被占用
      const roomId = guid()

      // isStart/是否开始 roomId/房间id
      const sqlRoomList = `INSERT INTO roomList(isStart, roomId) VALUES ('0', '${roomId}')`
      db.query(sqlRoomList, (err, results) => {
        // 判断 sql语句是否执行成功
        // if (err) return res.send({status: 1, message: err.message})
        if (err) return res.cc(err.message)
        
        console.log(results)
      })

      const p = [],arr = []
      shuffle(roleDAta).map((item) => {
        p.push(
          new Promise((resolve, reject) => {
            // 插入行 用户
            arr.push(`('${roomId}', '${item.name}', '${item.type}', '${req.body.roomNumber}', '${req.body.username}')`)
           
            resolve()
            
            
          })
        )
      })
      
      Promise.all(p).then(() => {
        let sqlStr = `INSERT INTO room(roomId, name, type, roomNumber, username) VALUES ${arr.join(',')}`
      
        console.log(arr, sqlStr)
        db.query(sqlStr, (err, results2) => {
          // 判断 sql语句是否执行成功
          // if (err) return res.send({status: 1, message: err.message})
          if (err) return res.cc(err.message)
          
          //console.log(results)
          // if (results.affectedRows !== 1) return res.send({status: 1, message: '注册用户失败，请稍后再试！'})
          //if (results2.affectedRows !== 1) return res.cc('创建失败，请稍后再试！')

          res.send({
            status: 200,
            data: {
              roomId
            },
            message: '创建成功！'
          })
        
        })
      })

      
      
    } else {
     // 房间号被占用
     return res.cc('创建失败，房间号被占用，请更换房间号！')
    }
    
  })

  return
}

// 加入房间的处理函数
exports.joinRoom = (req, res) => {
  // 查询 room 房间号/roomNumber 表中的数据
  const sql = `select * from room WHERE roomNumber='${req.body.roomNumber}'`
  db.query(sql, (err, results1) => {
    
    // 判断 sql语句是否执行成功
    // if (err) return res.send({status: 1, message: err.message})
    if (err) return res.cc(err.message)
    
    console.log('加入房间', req.body)

    try {
      results1.forEach(x => {
        if (x.personnel === req.body.chineseName) {
          //判断已经 加入该房间
          throw('跳出循环')
        }
      })
    } catch(err) {
       res.send({
        status: 200,
        // data: results,
        message: '加入房间成功'
      })

      return
    }
    
    
    try {
      results1.forEach(item => {
        
        if (!item.personnel ) {
          //  查询 room 表中 的数据
          const sqlStr = `UPDATE room SET personnel='${req.body.chineseName}' WHERE roomNumber='${req.body.roomNumber}' AND id='${item.id}'`
          db.query(sqlStr, (err, results2) => {
            
            // 判断 sql语句是否执行成功
            if (err) return res.cc(err.message)
            
            res.send({
              status: 200,
              // data: results,
              message: '加入房间成功'
            })
            
          })

          throw('跳出循环')
        } else if (item.personnel === req.body.chineseNam) {
          res.send({
            status: 200,
            // data: results,
            message: '加入房间成功'
          })
        }
      })
    } catch (err) {
      console.log(err)
    }
    
  })
}
